/**
 * @Author: Sky24n
 * @GitHub: https://github.com/Sky24n
 * @Description: Log Util.
 * @Date: 2018/9/29
 */

import 'package:logger/logger.dart';

/// Log Util.
class KLog {
  static const String _defTag = 'KLogs ';
  static bool _debugMode = false; //是否是debug模式,true: log v 不输出.
  static int _maxLen = 1280;
  static String _tagValue = _defTag;
  static Logger? _logger;

  static void init({
    String tag = _defTag,
    bool isDebug = false,
    int maxLen = 999999999,
  }) {
    _tagValue = tag;
    _debugMode = isDebug;
    _maxLen = maxLen;

    _logger = Logger(
      printer: PrettyPrinter(
          stackTraceBeginIndex: 2,
          methodCount: 3,
          // Number of method calls to be displayed
          errorMethodCount: 8,
          // Number of method calls if stacktrace is provided
          lineLength: 120,
          // Width of the output
          colors: true,
          // Colorful log messages
          printEmojis: true,
          // Print an emoji for each log message
          printTime: false // Should each log print contain a timestamp
          ),
    );
  }

  static void d(dynamic object, {String? tag}) {
    if (_debugMode) {
      _printLog(tag, 'd', object);
    }
  }

  static void e(dynamic object, {String? tag}) {
    _printLog(tag, 'e', object);
  }

  static void v(dynamic object, {String? tag}) {
    if (_debugMode) {
      _printLog(tag, 'v', object);
    }
  }

  static void i(dynamic object, {String? tag}) {
    if (_debugMode) {
      _printLog(tag, 'i', object);
    }
  }

  static void w(dynamic object, {String? tag}) {
    if (_debugMode) {
      _printLog(tag, 'w', object);
    }
  }

  static void wtf(dynamic object, {String? tag}) {
    if (_debugMode) {
      _printLog(tag, 'wtf', object);
    }
  }

  static void _printLog(String? tag, String stag, dynamic object) {
    tag = tag ?? _defTag;
    switch (stag) {
      case 'd':
        _logger?.d("$tag $object");
        break;
      case 'e':
        _logger?.e("$tag $object");
        break;
      case 'v':
        _logger?.v("$tag $object");
        break;
      case 'i':
        _logger?.i("$tag $object");
        break;
      case 'w':
        _logger?.w("$tag $object");
        break;
      case 'wtf':
        _logger?.wtf("$tag $object");
        break;
    }
    // String da = dynamic.toString() ?? 'null';
    // tag = tag ?? _tagValue;
    // if (da.length <= _maxLen) {
    //   debugPrint('$tag$stag $da');
    //   return;
    // }
    // debugPrint(
    //     '$tag$stag — — — — — — — — — — — — — — — — st — — — — — — — — — — — — — — — —');
    // while (da.isNotEmpty) {
    //   if (da.length > _maxLen) {
    //     debugPrint('$tag$stag| ${da.substring(0, _maxLen)}');
    //     da = da.substring(_maxLen, da.length);
    //   } else {
    //     debugPrint('$tag$stag| $da');
    //     da = '';
    //   }
    // }
    // debugPrint(
    //     '$tag$stag — — — — — — — — — — — — — — — — ed — — — — — — — — — — — — — — — —');
  }
}
